/**
 * 字段格式化
 * @type {FieldFormatter}
 * @property form 表单搜索的常量
 * @property baseCustomer 客户信息
 * @property baseHousesHoldInfo 占用机房
 * @property baseOperCompany 经营单位
 * @property baseMonitorDevice 检测设备
 * @property baseIpAddressInfo ip 地址信息
 * @property moFilingSupervise 备案监管
 * @property tlogSecurity 事务日志模块
 * @author rxliuli
 */
const fieldFormatter = new class FieldFormatter {
    constructor() {
        this.form = {
            action: new Map()
                .set(1, '精确搜索')
                .set(2, '模糊搜索'),
            sizeComparison: new Map()
                .set(1, '大于')
                .set(2, '大于等于')
                .set(3, '小于')
                .set(4, '小于等于')
                .set(5, '等于'),
        }
        this.baseHouseInfo = {
            houseTypeMap: new Map()
                .set(1, '租用')
                .set(2, '自建')
                .set(999, '其它'),
        }
        this.baseCustomer = {
            userTypeMap: new Map()
                .set(1, '互联网应用服务')
                .set(2, '其他'),
            unitNatureMap: new Map()
                .set(1, '军队')
                .set(2, '政府机关')
                .set(3, '事业单位')
                .set(4, '企业')
                .set(5, '个人')
                .set(6, '社会团体')
                .set(999, '其他'),
            idTypeMap: new Map()
                .set(1, '工商营业执照号码')
                .set(2, '身份证')
                .set(3, '组织机构代码证书')
                .set(4, '事业法人证书')
                .set(5, '军队代号')
                .set(6, '社团法人证书')
                .set(7, '护照')
                .set(8, '军官证')
                .set(9, '台胞证')
                .set(999, '其他'),
        }
        this.baseHousesHoldInfo = {
            serviceContentMap: new Map()
                .set(1, '即时通信')
                .set(2, '搜索引擎')
                .set(3, '综合门户')
                .set(4, '网上邮局')
                .set(5, '网络新闻')
                .set(6, '博客/个人空间')
                .set(7, '网络广告/信息')
                .set(8, '单位门户网站')
                .set(9, '网络购物')
                .set(10, '网上支付')
                .set(11, '网上银行')
                .set(12, '网上炒股/股票基金')
                .set(13, '网络游戏')
                .set(14, '网络音乐')
                .set(15, '网络影视')
                .set(16, '网络图片')
                .set(17, '网络软件/下载')
                .set(18, '网上求职')
                .set(19, '网上交友/婚介')
                .set(20, '网上房产')
                .set(21, '网络教育')
                .set(22, '网站建设')
                .set(23, 'WAP')
                .set(24, '其他'),
            setModeMap: new Map()
                .set(0, '专线')
                .set(1, '虚拟主机')
                .set(2, '主机托管')
                .set(3, '整机租用')
                .set(999, '其他'),
            businessTypeMap: new Map()
                .set(1, 'IDC 业务')
                .set(2, 'ISP 业务'),
            regTypeMap: new Map()
                .set(1, '经营性网站（ICP经营许可证号）')
                .set(2, '非经营性网站（备案登记号）')
                .set(3, 'SP（备案登记号）')
                .set(4, 'BBS（BBS备案号）')
                .set(999, '其他'),
            virtualHostStateMap: new Map()
                .set(1, '启用')
                .set(2, '关闭'),
            virtualHostTypeMap: new Map()
                .set(1, '共享式')
                .set(2, '专用式')
                .set(3, '云虚拟'),
            lineBusinessTypeMap: new Map()
                .set(1, '互联网专线')
                .set(2, '商务专线')
                .set(3, '云专线')
                .set(999, '其他'),
        }
        this.baseData = {
            reportStatusMap: new Map()
                .set(0, '未上报')
                .set(1, '上报中')
                .set(2, '已上报')
                .set(3, '上报异常'),
            delFlagMap: new Map()
                .set(0, '未删除')
                .set(1, '删除'),
            dataFeatureMap: new Map()
                .set(1, '新增')
                .set(2, '修改')
                .set(3, '删除'),
        }
        this.baseMonitorDevice = {
            connectTypeMap: new Map()
                .set(1, '分光')
                .set(2, '镜像'),
            linkStatusMap: new Map()
                .set(1, '串接')
                .set(2, '并接')
                .set(3, '故障'),
            interceptTypeMap: new Map()
                .set(1, '无提示')
                .set(2, '自定义页面')
                .set(3, '指定 url 提示')
                .set(4, '302 跳转到指定 url'),
            appStateMap: new Map()
                .set(1, '正常运行')
                .set(2, '运行异常')
                .set(3, '正常关闭')
                .set(4, '异常关闭'),
            filterRuleMap: new Map()
                .set('tcp || udp', 'tcp || udp')
                .set('tcp port 80', 'tcp port 80'),
        }
        this.hotDomain = {
            reportStatusMap: new Map()
                .set(0, '未上报')
                .set(1, '上报中')
                .set(2, '已上报')
                .set(3, '上报异常'),
        }
        this.hotIp = {
            protocolMap: new Map()
                .set(1, 'TCP')
                .set(2, 'UDP')
                .set(3, '其它'),
            reportStatusMap: this.hotDomain.reportStatusMap,
            blockMap: new Map()
                .set(0, '未阻断')
                .set(1, '阻断'),
            dealStatusMap: new Map()
                .set(0, '未处置')
                .set(1, '已处置'),
            dealResultMap: new Map()
                .set(1, 'IP放行')
                .set(2, 'IP屏蔽'),
        }
        this.baseIpAddressInfo = {
            useTypeMap: new Map()
                .set(1, '静态')
                .set(2, '动态')
                .set(3, '保留'),
        }
        this.moFilingSupervise = {
            filingStatusMap: new Map()
                .set(1, '待查询')
                .set(2, '已备案')
                .set(3, '自备案')
                .set(4, '已失效')
                .set(5, '未备案'),
            dealStatusMap: new Map()
                .set(1, '未处置')
                .set(2, '已处置'),
            dealResultMap: new Map()
                .set(1, '域名放行')
                .set(2, '域名阻断'),
        }
        this.moIllegalInfo = {
            dangerLevelMap: new Map()
                .set(2, '低级')
                .set(3, '中级')
                .set(4, '高级'),
            dealStatusMap: new Map()
                .set(1, '未处置')
                .set(2, '域名放行')
                .set(3, '域名屏蔽')
                .set(4, '网址屏蔽')
                .set(5, '网址放行')
                .set(0, '信任'),
            logOperationMap: new Map()
                .set(1, '保留记录')
                .set(2, '删除记录')
                .set(3, '删除记录转存非法文件'),
            dealResultMap: new Map()
                .set(1, '域名放行')
                .set(2, '域名屏蔽')
                .set(3, '网址屏蔽')
        }
        this.moIllegalInfoDeal = {
            dealStatusMap: new Map()
                .set(2, '域名放行')
                .set(3, '域名屏蔽')
                .set(4, '网址屏蔽')
                .set(5, '网址放行'),
        }
        this.moIllegalMedia = {
            illegalTypeMap: new Map()
                .set(1, '非法图片')
                .set(2, '非法视频'),
            protocolMap: this.hotIp.protocolMap,
            dealStatusMap: this.moIllegalInfo.dealStatusMap,
            dealResultMap: this.moIllegalInfo.dealResultMap,
        }
        this.tlogSecurity = {
            //用户状态， 1：活跃，
            statusMap: new Map()
                .set(1, '活跃'),

            //用户类型， 1：超级管理员，2：普通管理员
            userTypeMap: new Map()
                .set(1, '超级管理员')
                .set(2, '普通管理员'),
            //操作日志表，操作类型
            operTypeMap: new Map()
                .set(0, '未设置')
                .set(1, '创建')
                .set(2, '修改')
                .set(3, '删除')
                .set(4, '查询')
                .set(5, '处置')
                .set(6, '取消处置')
                .set(7, '上报')
                .set(8, '检测')
                .set(9, '导入')
                .set(10, '导出')
                .set(11, '重启')
                .set(12, '批准')
                .set(13, '拒绝')
                .set(14, '设置信任')
                .set(15, '同步')
                .set(16, '注销'),
            //安全日志 事件类型
            eventTypeMap: new Map()
                .set(1, '登录')
                .set(2, '退出')
                .set(3, '越权')
                .set(4, '更改密码')
                .set(5, '更改状态')
                .set(6, '会员代管')
                .set(7, '登录会话检查')
                .set(8, '重设密码请求')
                .set(9, '权限组'),
            //系统日志 级别类型
            levelMap: new Map()
                .set('1', '信息')
                .set('2', '警告')
                .set('3', '错误'),


        }
        this.sysUser = {
            statusMap: new Map()
                .set(1, '启用')
                .set(2, '禁用'),
            userTypeMap: new Map()
                .set('1', '超级管理员')
                .set('2', '普通管理员'),
        }
        this.sysField = {
            statusMap: new Map()
                .set(1, '启用')
                .set(2, '禁用'),
            delFlagMap: new Map()
                .set('0', '未删除')
                .set('1', '已删除'),
            typeMap: new Map()
                .set(1, '备案属性')
                .set(2, '接入方式')
                .set(3, '单位属性')
                .set(4, '证件类型')
                .set(5, '机房性质')
                .set(6, '代理类型')
                .set(7, '服务内容')
                .set(8, '规则类型')
                .set(9, '违法违规情况')
                .set(10, '域名子分类')
                .set(11, '网络应用协议')
                .set(12, '前置审批')
                .set(13, '关键词分类')
                .set(14, '网卡口类型'),
        }
        this.sysWhitelist = {
            categoryMap: new Map()
                .set(1, 'IP 黑名单')
                .set(2, '域名黑名单')
                .set(3, 'IP白名单')
                .set(4, '域名白名单')
                .set(5, '网址白名单')
                .set(6, 'IP屏蔽')
                .set(7, '域名屏蔽')
                .set(8, '网址屏蔽'),
            sourceMap: new Map()
                .set(0, '其他')
                .set(1, '活跃IP')
                .set(2, '活跃域名')
                .set(3, '非法信息')
                .set(4, '非法多媒体')
                .set(5, '异常IP')
                .set(6, '违规网站')
                .set(7, '免过滤网站')
                .set(8, '备案监管'),
            statusMap: new Map()
                .set(1, '活跃')
                .set(2, '不活跃'),
            pagePathMap: new Map()
                .set(1, '/monitor-log/admin_active_ip')
                .set(2, '/monitor-log/admin_active_domain')
                .set(3, '/illegal-monitor/admin_illegal')
                .set(4, '/illegal-monitor/admin_multi_media')
                .set(5, '/monitor-log/admin_monitor_ip')
                .set(6, '/monitor-log/admin_monitor_web'),


        }
        this.sysBackupLog = {
            backupIcpPictureMap: new Map()
                .set(1, '关闭')
                .set(2, '启用'),
            backupIcpIspFileMap: new Map()
                .set(1, '关闭')
                .set(2, '启用'),
            backupFtpModeMap: new Map()
                .set(1, '被动模式')
                .set(2, '主动模式'),
        }
        this.networkManager = {
            statusMap: new Map()
                .set(1, '正常运行')
                .set(2, '运行异常'),
        }
        this.domainArchive = {
            dataTypeMap: new Map()
                .set(1, '月报')
                .set(2, '周报')
                .set(3, '日报'),
        }
        this.slogHotDomain = {
            topDomainflagMap: new Map()
                .set(0, '顶级域名')
                .set(1, '非顶级域名'),
        }
    }

    /**
     * 生成一个函数
     * @param map 要获取的 Map 集合
     * @returns {function(*=): (*|string)} 生成的函数
     */
    generator = map => k => map.get(k) || ''
    /**
     * TableColumn 的装饰门面
     * @param map 要获取的 Map 集合
     * @returns {function(*, *, *=, *): *} 生成的函数
     */
    facade = map => (_row, _column, value, _index) => this.generator(map)(value)
}
